﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MGU_v1_Lab1
{

    class Program
    {

    
        static void Main(string[] args)
        {
            // 5. Создать один объект типа Student, преобразовать данные в текстовый 
            //вид с помощью метода ToShortString() и вывести данные.
            DateTime bd = Convert.ToDateTime("1992/06/07");
            Person person = new Person("Yan", "Zubritskiy", bd);
            Student student = new Student(person, Education.Specialist, 19);
            Console.WriteLine(student.ToStringShort());

            //6. Вывести значения индексатора для значений индекса Education.Specialist,
            //Education.Bachelor и Education.SecondEducation.
            Console.WriteLine(student[Education.Bachelor]);
            Console.WriteLine(student[Education.Specialist]);
            Console.WriteLine(student[Education.SecondEducation]);

            //7. Присвоить значения всем определенным в типе Student свойствам,
            //преобразовать данные в текстовый вид с помощью метода ToString() и 
            //вывести данные.
            student.EducationInfo = Education.SecondEducation;
            student.ExamInfo = new Exam[] { new Exam() };
            student.GroupNumber = 191;

            // 8. C помощью метода AddExams( params Exam[] )  добавить элементы в 
            //список экзаменов и вывести данные объекта Student, используя метод 
            //ToString().
            student.AddExams(new Exam("Mathematick", Convert.ToDateTime("2009/12/24"), 4));
            Console.WriteLine(student.ToString());

            // 9. Сравнить время выполнения операций с элементами одномерного,
            //двумерного прямоугольного и двумерного ступенчатого массивов с 
            //одинаковым числом элементов типа Exam.

            Exam[] exOneDimesional = new Exam[15];
            Exam[,] exTwoDimensional = new Exam[3,5];
            Exam[][] exJagged = new Exam[5][];

            for (int i = 0; i < exOneDimesional.Length; i++)
            {
                exOneDimesional[i] = new Exam();
            }
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    exTwoDimensional[i, j] = new Exam();
                }
            }
            int k = 0;
            for (int i = 0; i < 5; i++)
            {
                exJagged[i] = new Exam[k];
                for (int j = 0; j < k; j++)
                {
                    exJagged[i][j] = new Exam();
                }
                k++;
            }
            
            DateTime oneDimesionalCounterBegin = DateTime.Now;
            foreach (Exam ex in exOneDimesional)
            {
                string s = ex.ToString();
            }
            DateTime oneDimesionalCounterEnd = DateTime.Now;

            DateTime twoDimesionalCounterBegin = DateTime.Now;
            foreach (Exam ex in exTwoDimensional)
            {
                string s = ex.ToString();
            }
            DateTime twoDimesionalCounterEnd = DateTime.Now;

            DateTime jaggedCounterBegin = DateTime.Now;
            foreach (Exam ex in exOneDimesional)
            {
                string s = ex.ToString();
            }
            DateTime jaggedCounterEnd = DateTime.Now;

            TimeSpan ODTime = oneDimesionalCounterBegin - oneDimesionalCounterEnd;
            TimeSpan TDTime = twoDimesionalCounterBegin - twoDimesionalCounterEnd;
            TimeSpan JTime = jaggedCounterBegin - jaggedCounterEnd;
            long o = ODTime.Ticks;
            long t = TDTime.Ticks;
            long jagg = JTime.Ticks;
            Console.WriteLine("Time on operation with one dimensional array is: {0}. \n Time on operation with two dimensional array is: {1}. \n Time on operation with jagged array is: {2}. \n", o, t, jagg);
                Console.ReadLine();
        }
    }
}
